Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [JavaScript] Usunięcie <td> (skrypt Greasemonkey)
bohdan
post
Post #1





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 25.06.2009

Ostrzeżenie: (0%)
-----


Witam robie skrypt Greasemonkey'ia pod pewną stronę, niestety wymaga on usunięcia <td> z kodu.

Skrypt tego typu:
  1. <?php
  2. // ==UserScript==
  3. // @name           <td> Hider
  4. // @description    <td> Hider
  5. // @include        <a href=\"http://adres-strony.pl/*\" target=\"_blank\">http://adres-strony.pl/*</a>
  6.  
  7. // ==/UserScript==
  8.  
  9. GM_addStyle(".gnsall { display:none!important;}");
  10. ?>

Nie wchodzi w grę ponieważ to samo 'class' ma pare rzeczy i usuwa niepotrzebne.

Dlatego trzeba napisać kod gdzie Greasemonkey zrozumie o jakiego <td> chodzi. Poprzez ten 'title' który nigdy sie nie powtarza smile.gif

a tutaj kod źródła strony
  1. <?php
  2. <tr>
  3. <td class="row1" title="kuchnia przyprawy" align="left" valign="top"><span class="gnsall">
  4. </span></td>
  5.  </tr>
  6. ?>


Z góry dzięki za pomoc
Go to the top of the page
+Quote Post
mls
post
Post #2





Grupa: Zarejestrowani
Postów: 677
Pomógł: 89
Dołączył: 31.08.2003
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Zapewne poprzez selektor:
Kod
td.gnsall[title="kuchnia przyprawy"] { display:none!important;}


Ten post edytował mls 25.06.2009, 10:01:10


--------------------
Go to the top of the page
+Quote Post
bohdan
post
Post #3





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 25.06.2009

Ostrzeżenie: (0%)
-----


Próbowałem tego kodu na 20 różnych wersji - nic :F
Go to the top of the page
+Quote Post
kamil4u
post
Post #4





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


A Twoja przeglądarka interpretuje CSS3? Jak nie wiesz o co chodzi czy korzystasz z FF>=3?

Można jeszcze wyciągnąć element przez JS. Szukasz w Google funkcji getElementsByClassName, zakładasz pętlę na wszystkie wyniki i spr czy tittle = 'coś tam' i jeśli tak to element.style.display = 'none';

PS. Słoabo znam GM smile.gif

Ten post edytował kamil4u 25.06.2009, 11:19:35


--------------------
Go to the top of the page
+Quote Post
bohdan
post
Post #5





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 25.06.2009

Ostrzeżenie: (0%)
-----


Tak, FF3, poszukam trochę o tym getElementsByClassName, ale nie ukrywam ze i tak i tak pomocby się przydała
Go to the top of the page
+Quote Post
kamil4u
post
Post #6





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


Pokaż co tam naskrobałeś jak wychodzić nie będzie to pomożemy - pamiętaj, że DOM musi być załadowane:
Kod
onload = function(){
//tu już normalny kod :)
}


--------------------
Go to the top of the page
+Quote Post
bohdan
post
Post #7





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 25.06.2009

Ostrzeżenie: (0%)
-----


Poddaje sie :F
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
pamiętaj, że DOM musi być załadowane:

A w kodzie mówisz o czym innym. [;


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
kamil4u
post
Post #9





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


Cytat
Poddaje sie :F

Pokaż chociaż swoje próby. Nie będziemy za Ciebie pisać gotowców, gdy Ty nawet nie raczysz spróbować(a jak raczysz to to pokaż!)

Cytat
A w kodzie mówisz o czym innym. [;

A czepiasz się smile.gif - a poza tym mówię o tym samym bo DOM po tym zdarzeniu i tak jest załadowany. Poza tym dla początkującego, a takim zapewne jest autor, to bez większej różnicy smile.gif


--------------------
Go to the top of the page
+Quote Post
bohdan
post
Post #10





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 25.06.2009

Ostrzeżenie: (0%)
-----


Wyłączyłem wszystkie notatniki, w których robilem, ale za chwile zedytuje posta i napisze mniej wiecej to samo co wcześniej (troche pamiętam).

////

  1. var adSidebar = td.getElementsByTitle (kuchnia przyprawy);
  2. if (adSidebar) {
  3.    adSidebar.parentNode.removeChild(adSidebar);
  4.  
  5. }}


  1. var adSidebar = document.getElementsByTitle (kuchnia przyprawy);
  2. if (adSidebar) {
  3.    adSidebar.parentNode.removeChild(adSidebar);
  4.  
  5. }}


  1. var adSidebar = document.getElementsByClassName (kuchnia przyprawy);
  2. if (adSidebar) {
  3.    adSidebar.parentNode.removeChild(adSidebar);
  4.  
  5. }}


Robiłem to na bazie tego http://diveintogreasemonkey.org/patterns/remove-element.html

Ten post edytował bohdan 25.06.2009, 16:03:28
Go to the top of the page
+Quote Post
kamil4u
post
Post #11





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


Yyy no to tak jednym słowem to "źle":
  1. <? //Jeśli załadowany DOM <-- patrz wyżej]
  2. //pamiętaj, że zmienne lokalne
  3. e = pobór wszystkich_elementów_o_klasie_gnsall; //<-- getElementsByClassName
  4. petla_po_wszystkich_elementach_ze_zmiennej_e{ //<-- pęta for
  5. // do pętli wyżej - załóżmy, że w zmiennej x mamy dany element :)
  6. jezeli(x.tytul == 'dany tytul' i x.nodeName == 'td') //tittle
  7. to usun x <-- jak wyzej - u Ciebie
  8. }
  9. ?>


Ten post edytował kamil4u 25.06.2009, 16:22:34


--------------------
Go to the top of the page
+Quote Post
zegarek84
post
Post #12





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


Cytat(kamil4u @ 25.06.2009, 12:17:04 ) *
A Twoja przeglądarka interpretuje CSS3? Jak nie wiesz o co chodzi czy korzystasz z FF>=3?

Można jeszcze wyciągnąć element przez JS. Szukasz w Google funkcji getElementsByClassName, zakładasz pętlę na wszystkie wyniki i spr czy tittle = 'coś tam' i jeśli tak to element.style.display = 'none';

PS. Słoabo znam GM smile.gif

w FF3 jest już obsługiwana funkcja getElementsByClassName - nie trzeba jej tworzyć na nowo ;p - nowa opera - nie wiem od której dokładnie wersji ale też obsługuje getElementsByClassName ;p

ps. nie trzeba znać wcale GM by pisać skrypty dosyć rozbudowane pod GM - wystarczy znać js a z dodatkowych funkcji GM w zasadzie nie trzeba kożystać - a i nie lubię sam kożystać z unsafewindow ;p - da się to inaczej zrobić ;p

ps. skrypty GM odpalają się zawsze po załadowaniu DOM - jeśli chodzi o operę jeśli jest rozszerzenie podwójne tzn. .user.js to w operze jest podobnie i nie trzeba deklarować po załadowaniu dokumentu - a nawet wtedy by nie zadziałąło - ale jeśli w operze skrypt będzie miał rozszerzenie tylko .js to wtedy trzeba deklarować uruchomienie funkcji po załadowaniu DOM... w greasmonkey ogólnie jeszcze warstwa skryptu jest domyślnie oddzielona od window jednak niektóre przypadki botów jeśli ktoś takie pisze pod grę jakąś da się wykryć jeśli ktoś nie umiejętnie stosuje niektóre funkcje ;p

opera swoje skrypty łąduje do obiektu window odrazu więc wydawało by się że niedozwolone skrypty na niektórych grach łątwo wykryć - ale wystarczy trochu pomyśleć a w obiekcie window nie będzie śladu zdeklarowanej funkcji ani zmiennych winksmiley.jpg

zawsze można sprawdzić co siedzi w window za pomocą for(i in window){....} a w kropki odpowiednie zczytywanie winksmiley.jpg


--------------------
Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.

Go to the top of the page
+Quote Post
bohdan
post
Post #13





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 25.06.2009

Ostrzeżenie: (0%)
-----


  1. e = getElementsByClassName.gnsall;
  2. for                                          
  3. {                                                                    
  4. if (td.kuchnia przyprawy == 'kuchnia przyprawy' and e.nodeName == 'td')                
  5.  
  6. var adSidebar = document.getElementsByTitle (kuchnia przyprawy);
  7. if (adSidebar) {
  8.   adSidebar.parentNode.removeChild(adSidebar);  
  9. }  
  10. }

?

Nie działa - to oczywiste

Ten post edytował bohdan 25.06.2009, 20:00:28
Go to the top of the page
+Quote Post
erix
post
Post #14





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Kod
getElementsByClassName

A wskazałeś obiekt, wg którego szukać?

Poza tym: http://www.codingforums.com/showthread.php?t=121776


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
bohdan
post
Post #15





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 25.06.2009

Ostrzeżenie: (0%)
-----


Teraz mnie tak zawirowałeś ze nie rozumiem nic z tego ;(
Go to the top of the page
+Quote Post
erix
post
Post #16





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




No tę pierwszą funkcję musisz wywołać z kontekstu:
Kod
obiekt.getElement...

A u Ciebie tak nie jest.


--------------------

ZCE :: Pisząc PW załączaj LINK DO TEMATU i TYLKO w sprawach moderacji :: jakiś błąd - a TREŚĆ BŁĘDU? :: nie ponaglaj z odpowiedzią via PW!
Go to the top of the page
+Quote Post
kamil4u
post
Post #17





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


Po 1. - nie masz zielonego pojęcia o JS
Po 2. - po to są manule (MDC), żeby z nich korzystać
Po 3. - dałem Ci wskazówki, a nie gotowy kod w komentarzach
Po 4. - dam Ci jeszcze klika podpowiedzi(bo widzę ciężko to idzie )..

Kod
<?
e = document.getElementsByClassName('gnsall');
for(zmienna=0; x=e[zmienna++];) <-- tego nie będę tłumaczył, bo to trochę udziwnione :)
{                                                                    
if (td.kuchnia przyprawy == 'kuchnia przyprawy' and e.nodeName == 'td')  // popraw w pierwszym warunku na x.title == ..., a w drugim e na x (i zamień and na && - bo tak ładniej :) )      

var adSidebar = document.getElementsByTitle (kuchnia przyprawy); // co to za linia ?
if (adSidebar) { //ten waunek tez nie potrzebny
  adSidebar.parentNode.removeChild(adSidebar); // zamiast adSidebar daj x
}  
}
Przyjdź z poprawionym kodem smile.gif


--------------------
Go to the top of the page
+Quote Post
bohdan
post
Post #18





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 25.06.2009

Ostrzeżenie: (0%)
-----


  1. e = document.getElementsByClassName('gnsall');
  2. for(zmienna=0; x=e[zmienna++];)
  3. {                                                                    
  4. if (x.title == 'kuchnia przyprawy' && x.nodeName == 'td')    
  5.  adSidebar.parentNode.removeChild(x);
  6. }  
  7. }

? Coś nadal źle, bo nie chodzi

Ten post edytował bohdan 26.06.2009, 13:00:15
Go to the top of the page
+Quote Post
kamil4u
post
Post #19





Grupa: Zarejestrowani
Postów: 2 350
Pomógł: 512
Dołączył: 4.01.2009
Skąd: Wrocław / Świdnica

Ostrzeżenie: (0%)
-----


Powinno zadziałać smile.gif :
Kod
e = document.getElementsByClassName('gnsall');
for(var i=0; x=e[i++];){                                                                    
if (x.title == 'kuchnia przyprawy' && x.nodeName == 'td')    
x.parentNode.removeChild(x); // lub x.style.display = none;
}


--EDIT--
Dopiero teraz zauważyłem... :
Kod
<tr>
<td class="row1" title="kuchnia przyprawy" align="left" valign="top"><span class="gnsall">
</span></td>
</tr>
.., że to span ma class=gnsall, a nie td..., czyli kod IMO powinien być coś w ten deseń:
Kod
e = document.getElementsByClassName('gnsall');
for(var i=0; x=e[i++];){                                                                    
if (x.parentNode.title == 'kuchnia przyprawy' && x.nodeName == 'span')    
x.parentNode.removeChild(x); // lub x.style.display = none;
}


Ten post edytował kamil4u 26.06.2009, 13:09:42


--------------------
Go to the top of the page
+Quote Post
bohdan
post
Post #20





Grupa: Zarejestrowani
Postów: 13
Pomógł: 0
Dołączył: 25.06.2009

Ostrzeżenie: (0%)
-----


Dziwna sprawa - zaden z powyzszych nie działa sciana.gif
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 13:05